﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business.Logic;
using Business.Entities;

namespace UI.Desktop
{
    public partial class EspecialidadesDesktop : ApplicationForm
    {
        private Especialidad _EspecialidadActual;

        public Especialidad EspecialidadActual
        {
            get 
            {
                if (_EspecialidadActual == null)
                    _EspecialidadActual = new Especialidad();
                return _EspecialidadActual; 
            }
            set { _EspecialidadActual = value; }
        }

        #region Constructores

        public EspecialidadesDesktop()
        {
            InitializeComponent();
        }

        public EspecialidadesDesktop(ModoForm modo):this()
        {
            this.Modo = modo;
            MapearDeDatos();
        }

        public EspecialidadesDesktop(int ID, ModoForm modo):this()
        {
            try
            {
                this.Modo = modo;
                EspecialidadLogic espLog = new EspecialidadLogic();
                EspecialidadActual = espLog.GetOne(ID);
                MapearDeDatos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                this.Close();
            }
        }

        #endregion

        #region Eventos

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.Modo != ModoForm.Consulta)
                {
                    if (Validar() != false)
                    {
                        MapearADatos();
                        GuardarCambios();
                        switch (Modo)
                        {
                            case ModoForm.Alta:
                                MessageBox.Show("La Especialidad fue registrada correctamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                                break;
                            case ModoForm.Modifica:
                                MessageBox.Show("La Especialidad fue modificada correctamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                                this.Close();
                                break;
                            case ModoForm.Baja:
                                MessageBox.Show("La Especialidad fue eliminada correctamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                                this.Close();
                                break;
                        }
                        btnCancelar.Text = "Cerrar";
                    }
                }
                else
                {
                    MapearADatos();
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion

        #region Métodos

        protected override void MapearDeDatos()
        {
                if (ModoForm.Alta != this.Modo)
                {
                    this.txtID.Text = Convert.ToString(EspecialidadActual.ID);
                    this.txtDescrip.Text = EspecialidadActual.Descripcion;
                }
                switch (this.Modo)
                {
                    case ModoForm.Alta:
                        this.btnAceptar.Text = "Guardar";
                        break;
                    case ModoForm.Baja:
                        btnAceptar.Text = "Eliminar";
                        txtDescrip.ReadOnly = true;
                        break;
                    case ModoForm.Modifica:
                        btnAceptar.Text = "Guardar Cambios";
                        break;
                    case ModoForm.Consulta: btnAceptar.Text = "Aceptar";
                        txtDescrip.ReadOnly = true;
                        break;
                }
        }

        protected override void MapearADatos()
        {
            try
            {
                switch (Modo)
                {
                    case ModoForm.Alta:
                        Especialidad esp = new Especialidad();
                        esp.Descripcion = txtDescrip.Text.ToString();
                        esp.State = Especialidad.States.New;
                        EspecialidadActual = esp;
                        break;

                    case ModoForm.Consulta:
                        EspecialidadActual.State = Especialidad.States.Unmodified;
                        break;

                    case ModoForm.Modifica:
                        EspecialidadActual.Descripcion = txtDescrip.Text.ToString();
                        EspecialidadActual.State = Especialidad.States.Modified;
                        break;

                    case ModoForm.Baja:
                        EspecialidadActual.State = Materias.States.Deleted;
                        break;
                }
            }
            catch (FormatException fe)
            {
                throw fe;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        protected override void GuardarCambios()
        {
            try
            {
                EspecialidadLogic EspLog = new EspecialidadLogic();
                if (this.Modo != ModoForm.Baja)
                    EspLog.Save(EspecialidadActual);
                else
                    EspLog.Delete(EspecialidadActual);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        protected override bool Validar()
        {
            ValidacionesEspeciales val = new ValidacionesEspeciales();
            string mensaje = "";
            if (txtDescrip.Text == "")
                mensaje += "- Debe completar el campo Descripcion" + "\n";
            if (val.TipoValidacion(ValidacionesEspeciales.Tipos.esSimbolo, txtDescrip.Text.Trim()))
                mensaje += "- El campo Descripción contiene símbolos" + "\n";
            if (!val.TipoValidacion(ValidacionesEspeciales.Tipos.esMenor50, txtDescrip.Text.Trim()))
                mensaje += "- El campo Descripción tiene más de 50 caracteres" + "\n";

            if (mensaje == "")
                return true;
            else
            {
                MessageBox.Show(mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
        }

        #endregion
    }
}
